package com.woniuxy.mapper;

import com.woniuxy.entity.dto.operations.*;
import com.woniuxy.entity.po.dic.Dictionary;
import com.woniuxy.entity.po.operations.Client;
import com.woniuxy.entity.po.operations.Vehicle;
import com.woniuxy.util.ResponseData;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author Quan
* @description 针对表【client(客户管理表)】的数据库操作Mapper
* @createDate 2025-03-27 15:28:02
* @Entity com.woniuxy.entity.po.operations.Client
*/
public interface ClientMapper {
	/**
	 * @Description: 查询全部的用户信息
	 * @Param: []
	 * @return: java.util.List<com.woniuxy.entity.po.operations.Client>
	 * @Author: Quan
	 * @Date: 2025/3/30
	 */
	List<Client> queryAllClientToSelect(ClientForCardSelectDisplayDTO client);

	/**
	 * @Description: 查询全部数据
	 * @Param: [clientDisplayDTO]
	 * @return: java.util.List<com.woniuxy.entity.po.operations.Client>
	 * @Author: Quan
	 * @Date: 2025/3/31
	 */
	List<Client> queryAll(ClientDisplayDTO clientDisplayDTO);

	/**
	 * @Description: 通过用户id进行禁用
	 * @Param:
	 * @return:
	 * @Author: Quan
	 * @Date: 2025/3/31
	 */
	void forbiddenById(Long id);

	/**
	 * @Description: 通过id对客户进行删除
	 * @Param: [id]
	 * @return: void
	 * @Author: Quan
	 * @Date: 2025/3/31
	 */
	void deleteClientById(Long id);

	/**
	 * @Description: 从字典中查询所有的客户类型
	 * @Param: []
	 * @return: java.util.List<com.woniuxy.entity.po.dic.Dictionary>
	 * @Author: Quan
	 * @Date: 2025/4/1
	 */
	List<Dictionary> queryClientType();

	/**
	 * @Description: 从字典表中查询支付类型
	 * @Param: []
	 * @return: java.util.List<com.woniuxy.entity.po.dic.Dictionary>
	 * @Author: Quan
	 * @Date: 2025/4/3
	 */
	List<Dictionary> queryAccountType();

	/**
	 * @Description: 通过客户id和updateCarNum更新持有车的数据
	 * @Param: [id, updateCarNum]
	 * @return: void
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	int updateHoldCarNumById(@Param("id") Long id, @Param("updateCarNum") Integer updateCarNum);

	/**
	 * @Description: 通过客户id查询客户信息与持有的车辆
	 * @Param: [id]
	 * @return: java.util.List<com.woniuxy.entity.dto.operations.ClientDetailDTO>
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	ClientDetailDTO queryClientBindVehicleByClientId(Long id);

	/**
	 * @Description: 通过车辆的id解绑对应的用户
	 * @Param: [id]
	 * @return: void
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	void unbindVehicle(Long id);

	/**
	 * @Description: 查询没有绑定用户的车辆
	 * @Param: [vehicle]
	 * @return: java.util.List<com.woniuxy.entity.po.operations.Vehicle>
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	List<Vehicle> queryUnbindVehicle(VehicleDisplayForClientDetailDTO vehicle);

	/**
	 * @Description: 通过车辆的id绑定对应的用户
	 * @Param: [id]
	 * @return: void
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	void bindVehicle(UnbindVehicleDTO unbindVehicleDTO);

	/**
	 * @Description: 对客户的数据进行更新
	 * @Param: [clientDetailDTO]
	 * @return: void
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	void updateClient(ClientDetailDTO clientDetailDTO);

	/**
	 * @Description: 添加客户信息到数据库中，并且将id返回
	 * @Param: [clientDetailDTO]
	 * @return: void
	 * @Author: Quan
	 * @Date: 2025/4/3
	 */
	void addClient(ClientDetailDTO clientDetailDTO);

	/**
	 * @Description: 刷新用户的持车数量
	 * @Param: []
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/7
	 */
	ResponseData<?> refresh();
	Integer queryClientNumber();
	Integer queryClientNumberToday();

	/**
	 * @Description: 通过id查询用户
	 * @Param: [clientId]
	 * @return: void
	 * @Author: Quan
	 * @Date: 2025/4/8
	 */
	Client queryClientById(Long clientId);
}




